package com.elm.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.crypto.SecretKey;

public class JwtUtil {
	 // 过期时间（2小时）
    private static final long EXPIRATION_TIME = 72000000;
    
    // 使用JJWT提供的方法生成符合安全规范的密钥（256位）
    // 注意：实际生产环境中应将此密钥存储在安全的配置中，不要硬编码
    private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
    
    // 如需持久化密钥，可以将其Base64编码后存储
    private static final String ENCODED_SECRET_KEY = Base64.getEncoder().encodeToString(SECRET_KEY.getEncoded());

	// 生成Token
	public static String generateToken(String username, String userType) {
		Map<String, Object> claims = new HashMap<>();
		claims.put("username", username);
		claims.put("userType", userType); // 存储用户类型（admin/boss/staff/user）

		return Jwts.builder().setClaims(claims).setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
				.signWith(SignatureAlgorithm.HS256, SECRET_KEY).compact();
	}

	// 解析Token获取用户信息
	public static Claims parseToken(String token) {
		return Jwts.parserBuilder().setSigningKey(SECRET_KEY).build().parseClaimsJws(token).getBody();
	}

	// 从Token中获取userId
	public static String getUsernameFromToken(String token) {
		return parseToken(token).get("username", String.class);
	}

	// 从Token中获取userType
	public static String getUserTypeFromToken(String token) {
		return parseToken(token).get("userType", String.class);
	}
}